package cc.co.taciano.agenda2.actions;

import java.util.List;

import cc.co.taciano.agenda2.beans.Perfil;
import cc.co.taciano.agenda2.beans.Usuario;
import org.apache.log4j.Logger;

/**
 * Classe Action responsÃ¡vel pelo cadastro de usuÃ¡rios no sistema.
 * @author Taciano Morais Silva
 * @version 05/11/2008
 * @since 05/11/2008
 */
public class UsuarioAction extends AgendaAction {

    private Logger logger = Logger.getLogger(UsuarioAction.class);

    /**
     * NÃºmero para serializaÃ§Ã£o.
     */
    private static final long serialVersionUID = -4590359058832390112L;

    /**
     * Lista de usuÃ¡rios.
     */
    private List<Usuario> usuarios;

    /**
     * Lista de perfis.
     */
    private List<Perfil> perfis;

    /**
     * Bean usuÃ¡rio.
     */
    private Usuario usuario;

    /**
     * Carrega a lista de usuÃ¡rios do sistema.
     * @see com.opensymphony.xwork2.ActionSupport#execute()
     */
    @Override
    public String execute() throws Exception {
        logger.info("execute()");
        setPerfis(getAgenda().listarPerfis());
        setUsuarios(getAgenda().listarUsuarios());
        return SUCCESS;
    }

    /**
     * Carrega a tela de inclusÃ£o de usuÃ¡rios do sistema.
     * @see com.opensymphony.xwork2.ActionSupport#execute()
     */
    public String solicitarInclusao() throws Exception {
        logger.info("solicitarInclusao()");
        setPerfis(getAgenda().listarPerfis());
        return SOLICITAR_INCLUSAO;
    }

    /**
     * Inclui o usuÃ¡rio no sistema.
     * @see com.opensymphony.xwork2.ActionSupport#execute()
     */
    public String incluir() throws Exception {
        logger.info("incluir()");
        getAgenda().incluirUsuario(getUsuario());
        setUsuario(null);
        return execute();
    }

    /**
     * Carrega a tela de alteraÃ§Ã£o de usuÃ¡rios do sistema.
     * @see com.opensymphony.xwork2.ActionSupport#execute()
     */
    public String solicitarAlteracao() throws Exception {
        logger.info("solicitarAlteracao()");
        setPerfis(getAgenda().listarPerfis());
        setUsuario(getAgenda().buscarUsuario(usuario.getId()));
        return SOLICITAR_ALTERACAO;
    }

    /**
     * Realiza a alteraÃ§Ã£o e carrega a lista de usuÃ¡rios do sistema.
     * @see com.opensymphony.xwork2.ActionSupport#execute()
     */
    public String alterar() throws Exception {
        logger.info("alterar()");
        getAgenda().alterarUsuario(getUsuario());
        setUsuario(null);
        return execute();
    }

    /**
     * Carrega a tela de alteraÃ§Ã£o de usuÃ¡rios do sistema.
     * @see com.opensymphony.xwork2.ActionSupport#execute()
     */
    public String excluir() throws Exception {
        logger.info("excluir()");
        getAgenda().excluirUsuario(getUsuario().getId());
        setUsuario(null);
        return execute();
    }

    /**
     * Pesquisa a lista de usuÃ¡rio filtrando por login e nome.
     * @return Encaminha para a pÃ¡gina de listagem.
     * @throws java.lang.Exception Caso ocorre erro.
     */
    public String pesquisar() throws Exception {
        logger.info("pesquisar()");
        List<Usuario> lista = getAgenda().pesquisar(getLogin(), getNome(), getPerfil());
        setUsuarios(lista);
        setPerfis(getAgenda().listarPerfis());
        setUsuario(null);
        return SUCCESS;
    }

    /**
     * Modifica a lista de usuÃ¡rios.
     * @param usuarios A lista de usuÃ¡rios da action.
     */
    public void setUsuarios(List<Usuario> usuarios) {
        this.usuarios = usuarios;
    }

    /**
     * @return
     */
    public List<Usuario> getUsuarios() {
        return usuarios;
    }

    /**
     * @return
     */
    public Usuario getUsuario() {
        return usuario;
    }

    /**
     * @param usuario
     */
    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    /**
     * @return
     */
    public Integer getIdUsuario() {
        if (usuario != null) {
            return usuario.getId();
        }
        return null;
    }

    /**
     * @param id
     */
    public void setIdUsuario(Integer id) {
        if (usuario == null) {
            usuario = new Usuario();
        }
        usuario.setId(id);
    }

    /**
     * @return
     */
    public String getNome() {
        if (usuario != null) {
            return usuario.getNome();
        }
        return null;
    }

    /**
     * @param nome
     */
    public void setNome(String nome) {
        if (usuario == null) {
            usuario = new Usuario();
        }
        usuario.setNome(nome);
    }

    /**
     * @return
     */
    public String getLogin() {
        if (usuario != null) {
            return usuario.getLogin();
        }
        return null;
    }

    /**
     * @param login
     */
    public void setLogin(String login) {
        if (usuario == null) {
            usuario = new Usuario();
        }
        usuario.setLogin(login);
    }

    /**
     * @return
     */
    public String getSenha() {
        if (usuario != null) {
            return usuario.getSenha();
        }
        return null;
    }

    /**
     * @param senha
     */
    public void setSenha(String senha) {
        if (usuario == null) {
            usuario = new Usuario();
        }
        usuario.setSenha(senha);
    }

    /**
     * @return
     */
    public Perfil getPerfil() {
        if (usuario != null) {
            return usuario.getPerfil();
        }
        return null;
    }

    /**
     * @param perfil
     */
    public void setPerfil(Perfil perfil) {
        if (usuario == null) {
            usuario = new Usuario();
        }
        usuario.setPerfil(perfil);
    }

    /**
     * @return
     */
    public List<Perfil> getPerfis() {
        return perfis;
    }

    /**
     * @param perfis
     */
    public void setPerfis(List<Perfil> perfis) {
        this.perfis = perfis;
    }
}
